#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<random>
using namespace std;

int  main(){
    //使用srand(),rand()生成随机数
    cout<<"srand+rand"<<endl;
    srand((unsigned)time(NULL));//使用时钟数，每次获取不一样的随机数
    for(int i=0;i<3;i++){
        cout<<rand()<<endl;
    }
    srand(1);//使用同一数，每次获取一样的随机数
    for(int i=0;i<3;i++){
        cout<<rand()<<endl;
    }
    //使用random库的类
    //1.default_random_engine类，生成随机非负数
    cout<<"std::default_random_engnie"<<endl;
    std::default_random_engine e;
    e.seed(time(0));
    for(int i=0;i<3;i++){
        cout<<e()<<endl;
    }
    e.seed(1);
    for(int i=0;i<3;i++){
        cout<<e()<<endl;
    }
    //2.使用随机数分布类，生成均匀分布整数
    cout<<"std::uniform_int_distribution"<<endl;
    std::default_random_engine eu;
    std::uniform_int_distribution<int> u(2,20);//确定随机数区间，左闭右开
    eu.seed(time(0));
    for(int i=0;i<3;i++){
        cout<<u(eu)<<endl;
    }
    //3.使用随机实数分布类，生成均匀的实数
    cout<<"std::uniform_real_distribution"<<endl;
    std::default_random_engine er;
    std::uniform_real_distribution<double> r(-5,5);
    for(int i=0;i<3;i++){
        cout<<r(er)<<endl;
    }
    //3.生成正态分布实数
    cout<<"std::normal_distribution"<<endl;
    std::default_random_engine en;
    std::normal_distribution<double> n(0,1);//均值为0.标准差为1
    e.seed(time(0));
    for(int i=0;i<3;i++){
        cout<<n(en)<<endl;
    }

    return 0;
}